﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Globalization;
using System.IO;
using produccion.reportes;
using produccion.vistamodelo;
using System.Threading;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMpedporcli.xaml
    /// </summary>
    public partial class FRMpedporcli : Window
    {
        public FRMpedporcli()
        {
            InitializeComponent();
        }
        private void pedpor_Loaded(object sender, RoutedEventArgs e)
        {
            #region FJRF - EstilosParaDataGrid
            //Style MyStyleTransparent = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
            //MyStyleTransparent.Setters.Add(new Setter(BackgroundProperty, Brushes.Transparent));//FJRF - Decimos que el texto se ponga transparente para que tome las propiedades del grid

            ////FJRF - GRID DE ARRIBA
            //datPed.Columns[2].CellStyle = MyStyleTransparent;
            //datPed.Columns[3].CellStyle = MyStyleTransparent;
            //datPed.Columns[4].CellStyle = MyStyleTransparent;

            ////FJRF - GRID DE ABAJO
            //dataGrid1.Columns[0].CellStyle = MyStyleTransparent;
            //dataGrid1.Columns[1].CellStyle = MyStyleTransparent;

            Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
            MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

            //FJRF - GRID DE ARRIBA
            datPed.Columns[0].CellStyle = MyStyleTextAlignmentProperty;
            datPed.Columns[1].CellStyle = MyStyleTextAlignmentProperty;

            datPed.Columns[5].CellStyle = MyStyleTextAlignmentProperty;
            datPed.Columns[6].CellStyle = MyStyleTextAlignmentProperty;
            datPed.Columns[7].CellStyle = MyStyleTextAlignmentProperty;
            datPed.Columns[8].CellStyle = MyStyleTextAlignmentProperty;
            datPed.Columns[9].CellStyle = MyStyleTextAlignmentProperty;

            //FJRF - GRID DE ABAJO
            dataGrid1.Columns[2].CellStyle = MyStyleTextAlignmentProperty;
            dataGrid1.Columns[3].CellStyle = MyStyleTextAlignmentProperty;
            dataGrid1.Columns[4].CellStyle = MyStyleTextAlignmentProperty;
            dataGrid1.Columns[5].CellStyle = MyStyleTextAlignmentProperty;
            dataGrid1.Columns[6].CellStyle = MyStyleTextAlignmentProperty;
            dataGrid1.Columns[7].CellStyle = MyStyleTextAlignmentProperty;
            dataGrid1.Columns[8].CellStyle = MyStyleTextAlignmentProperty;
            #endregion

            texCli.Style = null;//FJRF - Quitamos cualquier estilo que tenga para no pase el enter de forma automatica
            combSub.Style = null;//FJRF - Quitamos cualquier estilo que tenga para no pase el enter de forma automatica
            button1.Style = null;//FJRF - Quitamos cualquier estilo que tenga para no pase el enter de forma automatica

            Keyboard.Focus(texCli);
        }
        
        private void butGua_Click(object sender, RoutedEventArgs e)
        {
            pedporcli.guardar(wPnot);
            texCli.Focus();
            texCli.Select(0, 0);
        }

        private void butImprimir_Click(object sender, RoutedEventArgs e)
        {
            pedporcli.imprimir();
        }

        private void butEli_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("Esta seguro que desea eliminar el pedido?", "Confirmar Eliminación", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
            {
                pedporcli.elimPed(wPnot);
                texCli.Focus();
                texCli.Select(0, 0);
            }
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void butAcep_Click(object sender, RoutedEventArgs e)
        {
            pedporcli.guaDeTal();
        }

        private void datTal_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            if (e.Column.Header.ToString().Equals("ValorEstado") || e.Column.Header.ToString().Equals("Tipo"))
            {
                e.Cancel = true;
            }
        }

        private void butNuev_Click(object sender, RoutedEventArgs e)
        {
            pedporcli.nuevoPedido();
        }

        private void butExaLog_Click(object sender, RoutedEventArgs e)
        {
            pedporcli.buscarOriginal();
        }

        private void datPed_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void datTal_PreviewKeyDown(object sender, KeyEventArgs e) 
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void pedpor_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }

        #region FJRF - MsgboxPersonalizado
        protected void Msgbox(String StrCaption, String StrMensaje, MessageBoxButton MsbTipoBoton, MessageBoxImage MsbTipoImagenIcono)
        {
            MessageBoxButton buttons;
            buttons = MsbTipoBoton;

            MessageBoxImage icon = MsbTipoImagenIcono;
            MessageBox.Show(StrMensaje, StrCaption, buttons, icon);
        }
        #endregion

        private void busCli(object sender, RoutedEventArgs e)
        {
            pedporcli.busCli();
            PttV_PasarFoco();//FJRF - Pasemos el foco
        }

        protected void PttV_PasarFoco()
        {
            if (texCli.Text.Trim().Length == 3)//FJRF - Si el cliente que es de tres digitos esta escrito entonces hacemos lo siguiente
            {
                int IntTotalSubClientes = combSub.Items.Count;//FJRF - Extraemos la cantidad de subclientes
                if (IntTotalSubClientes == 1)//FJRF - Si los subclientes son iguales a uno hacemos lo siguiente
                {
                    combSub.SelectedIndex = 0;//FJRF - Decimos que se pare en la primera posicion 
                }
                else//FJRF - Si no son iguales a uno haces que el usuario seleccione uno
                {
                    combSub.SelectedIndex = -1;//FJRF - Dejamos el combo en blanco
                }
                combSub.Focus();//FJRF - Enviamos el boton al foco de busqueda
            }
            else//FJRF - Si lo digitado es diferente de tres y presiona enter entonces hacemos lo siguiente
            {
                button1.Focus();//FJRF - Enviamos el foco a la busqueda del subcliente
            }
        }

        private void combSub_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                datPedido.Focus();//FJRF - Pasamos el foco a la fecha
            }
        }

        private void texCli_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (texCli.Text.Trim().Length == 3)//FJRF - Si el cliente esta digitado
            {
                PttV_PasarFoco();//FJRF - Pasemos el foco
            }
        }
    }

    public class pedporcli:ObservableObject 
    {

        public pedporcli()
        {
            MDOgeneral.conectar();
            strTituloVentana = "Pedidos por cliente - Usuario: " + MDOgeneral.usuario + " - [FRMpedporcli]";
        }

        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        ObservableCollection<encpedcli> _lisencpedcli = new ObservableCollection<encpedcli>();
        public ObservableCollection<encpedcli> lisencpedcli 
        {
            get { return _lisencpedcli; }
            set { _lisencpedcli = value; RaisePropertyChangedEvent("lisencpedcli"); }
        }

        encpedcli _Selencpedcli = new encpedcli();
        public encpedcli Selencpedcli
        {
            get { return _Selencpedcli; }
            set
            {
                _Selencpedcli = value;
                if (_Selencpedcli != null)
                {
                    pedido = new clases.CLSENCPPCP { CODCLI_EPC = codcli, NROPED_EPC = _Selencpedcli.codped };
                    consultarped();                   
                }
                RaisePropertyChangedEvent("Selencpedcli");
            }
        }
        
        ObservableCollection<detpedref> _lisdetpedref = new ObservableCollection<detpedref>();
        public ObservableCollection<detpedref> lisdetpedref 
        {
            get { return _lisdetpedref; }
            set { _lisdetpedref = value; RaisePropertyChangedEvent("lisdetpedref"); }
        }

        detpedref _Seldetpedref = new detpedref();
        public detpedref Seldetpedref 
        {
            get { return _Seldetpedref; }
            set 
            { 
                _Seldetpedref = value;
        
                if (_Seldetpedref != null)
                {
                    conDetPedTal();
                    ACTACEP = true;
                    _Seldetpedref.detpedido.CODCLI_DPC = codcli;
                    if (!String.IsNullOrEmpty(_Seldetpedref.codigo)) 
                    {
                        if (_Seldetpedref.codigo.Length == 6)
                        {
                            visorFotoReferencia.strCodigo = _Seldetpedref.codigo.Substring(0, 4);
                            visorFotoReferencia.strColor = _Seldetpedref.codigo.Substring(4, 2);
                        }
                    }
                }
                RaisePropertyChangedEvent("Seldetpedref");
            }
        }

        List<clases.CLSMAECLIP> _lisSubcli = new List<clases.CLSMAECLIP>();
        public List<clases.CLSMAECLIP> lisSubcli 
        {
            get { return _lisSubcli; }
            set { _lisSubcli = value; RaisePropertyChangedEvent("lisSubcli"); }
        }

        clases.CLSMAECLIP _sellisSubcli = new clases.CLSMAECLIP();
        public clases.CLSMAECLIP sellisSubcli
        {
            get { return _sellisSubcli; }
            set { _sellisSubcli = value; RaisePropertyChangedEvent("sellisSubcli"); }
        }

        clases.CLSENCPPCP _pedido=new clases.CLSENCPPCP();
        public clases.CLSENCPPCP pedido 
        {
            get { return _pedido; }
            set 
            { 
                _pedido = value; 
                RaisePropertyChangedEvent("pedido");
            }
        }

        public string codcli
        {
            get { return pedido.CODCLI_EPC; }
            set 
            {
                pedido.CODCLI_EPC = value;
                RaisePropertyChangedEvent("codcli");
                if (codcli != null)
                {
                    if (codcli.Length == 3)
                    {
                        consultarenc();
                    }
                    else
                    {
                        PttV_LimpiarDatos();//FJRF - Limpiamos los datos del formulario
                    }
                }
            }
        }
        protected void PttV_LimpiarDatos()
        {
            nomcli = null;
            lisencpedcli.Clear();
            RaisePropertyChangedEvent("lisencpedcli");
            lisSubcli.Clear();
            RaisePropertyChangedEvent("lisSubcli");
            sellisSubcli = null;
            RaisePropertyChangedEvent("sellisSubcli");
            lisdetpedref.Clear();
            RaisePropertyChangedEvent("lisdetpedref");
            totalpedido = 0;
            totalenviado = 0;
            totaldescartado = 0;
            totaldemas = 0;
            totalpendiente = 0;
            totalis = 0;
            pedido.OBSPED_EPC = "";
            pedido.PEDORI_EPC = "";
        }

        string _nomcli;
        public string nomcli 
        {
            get { return _nomcli; }
            set { _nomcli = value; RaisePropertyChangedEvent("nomcli"); }
        }

        double _totalis;
        public double totalis
        {
            get { return _totalis; }
            set { _totalis = value; RaisePropertyChangedEvent("totalis"); }
        }

        double _totalpedido;
        public double totalpedido
        {
            get { return _totalpedido; }
            set { _totalpedido = value; RaisePropertyChangedEvent("totalpedido"); }
        }

        double _totalenviado;
        public double totalenviado
        {
            get { return _totalenviado; }
            set { _totalenviado = value; RaisePropertyChangedEvent("totalenviado"); }
        }

        double _totaldescartado;
        public double totaldescartado
        {
            get { return _totaldescartado; }
            set { _totaldescartado = value; RaisePropertyChangedEvent("totaldescartado"); }
        }

        double _totaldemas;
        public double totaldemas
        {
            get { return _totaldemas; }
            set { _totaldemas = value; RaisePropertyChangedEvent("totaldemas"); }
        }

        double _totalpendiente;
        public double totalpendiente
        {
            get { return _totalpendiente; }
            set { _totalpendiente = value; RaisePropertyChangedEvent("totalpendiente"); }
        }
        
        Boolean _ACTACEP=true;
        public Boolean ACTACEP
        {
            get { return _ACTACEP; }
            set { _ACTACEP = value; RaisePropertyChangedEvent("ACTACEP"); }
        }

        Boolean _MODIFI = false;
        public Boolean MODIFI
        {
            get { return _MODIFI; }
            set { _MODIFI = value; RaisePropertyChangedEvent("MODIFI"); }
        }

        Boolean _ERRORPEDREF=false;
        public Boolean ERRORPEDREF 
        {
            get { return _ERRORPEDREF; }
            set { _ERRORPEDREF = value; RaisePropertyChangedEvent("ERRORPEDREF"); }
        }

        //Imagen de la referencia
        BitmapImage _imagen;
        public BitmapImage imagen
        {
            get { return _imagen; }
            set
            {
                _imagen = value;
                RaisePropertyChangedEvent("imagen");
            }
        }

        private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
        public VMvisorFotoReferencia visorFotoReferencia
        {
            get { return _visorFotoReferencia; }
            set { _visorFotoReferencia = value; RaisePropertyChangedEvent("visorFotoReferencia"); }
        }

       
        //Consulta la lista de pedidos
        public void consultarenc() 
        {
            try
            {
                consultarpedcli();
                //Consulta lista de subclientes
                lisSubcli = new clases.CLSMAECLIP { CODCLI_CLI = codcli }.listaSubCliente();
                //Consulta el nombre del cliente
                clases.CLSMAECLIP cliente = new clases.CLSMAECLIP {CODCLI_CLI=codcli};
                cliente.consultar();
                nomcli = cliente.NOMCLI_CLI;
                                
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }

        }
        public void consultarpedcli() 
        {
            clases.CLSENCPPCP ped = new clases.CLSENCPPCP {CODCLI_EPC=codcli };
            DataTable val=ped.listarPedidoCli();
            ObservableCollection<encpedcli> valores = new ObservableCollection<encpedcli>();
             foreach (DataRow r in val.Rows) 
             {
                valores.Add(new encpedcli 
                {
                    candemas = Convert.ToInt32(r["demas"]),
                    candes = Convert.ToInt32(r["candes_dpc"]),
                    canent = Convert.ToInt32(r["canent_dpc"]),
                    canped=Convert.ToInt32(r["canped_dpc"]),
                    canpen = Convert.ToInt32(r["pendiente"]),
                    codped = Convert.ToInt32( r["nroped_epc"]),
                    pedoriginal = r["pedori_epc"].ToString(),
                    EXISTE=true,
                    fechaent=r["fecent_epc"].ToString(),
                    fechaped=r["fecped"].ToString(),
                    nomsubcli = r["nomcli_cli"].ToString()
                });
            }
            lisencpedcli = valores;
        }

        //Consulta el encabezado del pedido
        public void consultarped() 
        {
            try 
            {
                pedido.consultar();
                conDetPedCol();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Consulta el subdetalle del pedido
        public void conDetPedCol() 
        {
            try 
            {
                totalis = 0;
                totaldemas = 0;
                totaldescartado = 0;
                totalenviado = 0;
                totalpedido = 0;
                totalpendiente = 0;

                ObservableCollection<detpedref> valores=new ObservableCollection<detpedref>();
                clases.CLSDETPPCP detped = new clases.CLSDETPPCP {CODCLI_DPC=codcli,NROPED_DPC=pedido.NROPED_EPC };
                DataTable val = detped.lisDetPedCol();

                foreach (DataRow r in val.Rows) 
                { 
                   detpedref detpededido= new detpedref
                   {
                        codigo=r["codref_dpc"].ToString()+r["codcol_dpc"].ToString(),
                        nomref=r["nomref_ref"].ToString(),
                        canpen=Convert.ToInt32(r["canpen"]),
                        demas=Convert.ToInt32(r["demas"]),
                        total=Convert.ToInt32(r["total"]),
                        nomcol = r["nomcol"].ToString(),
                        valor=Convert.ToDouble(r["valor_tar"]),
                        pedido = Convert.ToInt32(r["canped_dpc"]),
                        enviado = Convert.ToInt32(r["canent_dpc"]),
                        descartado = Convert.ToInt32(r["candes_dpc"])
                   };                    
                    detpededido.detpedido.CANPED_DPC=Convert.ToInt32(r["canped_dpc"]);
                    detpededido.detpedido.CANENT_DPC=Convert.ToInt32(r["canent_dpc"]);
                    detpededido.detpedido.CANDES_DPC=Convert.ToInt32(r["candes_dpc"]);
                    //El codigo del pedido se debe inicializar para nuevo
                    detpededido.detpedido.NROPED_DPC = _Selencpedcli.codped;
                    detpededido.detpedido.CODCLI_DPC = codcli;
                    detpededido.modifi = false;
                    totalis = totalis+detpededido.total;
                    totaldemas = totaldemas + detpededido.demas;
                    totaldescartado = totaldescartado + detpededido.descartado;
                    totalenviado = totalenviado + detpededido.enviado;
                    totalpedido = totalpedido + detpededido.pedido;
                    totalpendiente = totalpendiente + detpededido.canpen;
                    valores.Add(detpededido);            
                }
                lisdetpedref = valores;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Consulta el detalle del pedito (tallas)
        public void conDetPedTal() 
        {
            try 
            {

                if (Seldetpedref.pedtalla.Rows.Count > 0)
                {
                    Seldetpedref.prepedtalla.Clear();
                    Seldetpedref.prepedtalla = Seldetpedref.pedtalla.Copy();
                }
                else
                {
                    DataTable val = Seldetpedref.detpedido.lisDetPedTal();
                    DataTable valores = new DataTable();
                    
                    valores.Columns.Add("Tipo");
                    valores.Columns.Add("ValorEstado", System.Type.GetType("System.Boolean"));

                    foreach (DataRow r in val.Rows)
                    {
                        valores.Columns.Add(r["codtal_pro"].ToString());
                    }

                    DataRow dr = valores.NewRow();
                    dr["Tipo"] = "Pedido";
                    dr["ValorEstado"] = !pedido.EXISTE;
                    foreach (DataRow r in val.Rows)
                    {
                        dr[r["codtal_pro"].ToString()] = r["canped_dpc"].ToString();
                    }
                    valores.Rows.Add(dr);

                    dr = valores.NewRow();
                    dr["Tipo"] = "Enviado";
                    dr["ValorEstado"] = false;
                    foreach (DataRow r in val.Rows)
                    {
                        dr[r["codtal_pro"].ToString()] = r["canent_dpc"].ToString();
                    }
                    valores.Rows.Add(dr);

                    dr = valores.NewRow();
                    dr["Tipo"] = "Descartada";
                    dr["ValorEstado"] = false;
                    foreach (DataRow r in val.Rows)
                    {
                        dr[r["codtal_pro"].ToString()] = r["candes_dpc"].ToString();
                    }
                    valores.Rows.Add(dr);

                    dr = valores.NewRow();
                    dr["Tipo"] = "Pendiente";
                    dr["ValorEstado"] = false;
                    foreach (DataRow r in val.Rows)
                    {
                        if (r["canpen"]!=DBNull.Value)
                        {
                            dr[r["codtal_pro"].ToString()] = Convert.ToInt32(r["canpen"].ToString()) < 0 ? "0" : r["canpen"].ToString();
                        }
                    }
                    valores.Rows.Add(dr);

                    dr = valores.NewRow();
                    dr["Tipo"] = "A descartar";
                    dr["ValorEstado"] = pedido.EXISTE;
                    foreach (DataRow r in val.Rows)
                    {
                        dr[r["codtal_pro"].ToString()] = "";
                    }

                    valores.Rows.Add(dr);
                    Seldetpedref.prepedtalla = valores;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        
        }

        public void guaDeTal() 
        {
            if (Seldetpedref != null)
            {
                Seldetpedref.pedtalla.Clear();
                Seldetpedref.pedtalla = Seldetpedref.prepedtalla.Copy();
                sumarPedido();
                MODIFI = true;
            }
        }

        public void sumarPedido()
        {
            int canped = 0;
            int candes = 0;
            for (int i = 2; i <= Seldetpedref.pedtalla.Columns.Count - 1; i++)
            {
                if (!String.IsNullOrEmpty(Seldetpedref.pedtalla.Rows[0][i].ToString()))
                {
                    int ped = Convert.ToInt32(Seldetpedref.pedtalla.Rows[0][i]);
                    canped = canped + ped;
                }
                if (!String.IsNullOrEmpty(Seldetpedref.pedtalla.Rows[4][i].ToString()))
                {
                    int des = Convert.ToInt32(Seldetpedref.pedtalla.Rows[4][i]);
                    candes = candes + des;
                }
            }
            Seldetpedref.detpedido.CANPED_DPC = canped;
            Seldetpedref.detpedido.CANDES_DPC = candes;
            totalis = totalis - Seldetpedref.total;
            Seldetpedref.total = (canped-candes) * Seldetpedref.valor;
            totalis = totalis+ Seldetpedref.total;

        }

        public void nuevoPedido() 
        {
            try 
            {
                pedido.CAMBIO=false;
                pedido.DESPED_EPC="N";
                pedido.ESTPED_EPC="";
                pedido.EXISTE=false;
                pedido.FECENT_EPC = MDOgeneral.DttFechaActualDeValidacionEnElSistema;//FJRF - Ponemos la fecha del dia actual del mes seleccionado por el sistema
                pedido.FECPED_EPC = MDOgeneral.DttFechaActualDeValidacionEnElSistema;//FJRF - Ponemos la fecha del dia actual del mes seleccionado por el sistema
                pedido.FECPED_FIL = "";
                pedido.NROPED_EPC = 0;
                pedido.OBSPED_EPC = "";
                pedido.PEDORI_EPC = "";
                pedido.SUBCLI_EPC = "";
                pedido.PEDORI_EPC = "";
                totalis = 0;
                lisdetpedref.Clear();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void buscarOriginal() 
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.Filter = "Plano |*.psc";
            Boolean logExiste = false;
            string strRuta = @"\\10.1.1.10\PLANOS\";
            string strRutaAux = @"\\10.2.1.4\PLANOS\";
            string strArchivo="";
            dlg.InitialDirectory = strRuta;

            if (pedido != null)
            {
                if (pedido.PEDORI_EPC != null)
                {
                    if (pedido.PEDORI_EPC.Length == 6)//FJRF - Preguntamos si viene con el formato correcto de 6 caracteres y si es asi hacemos lo siguiente
                    {
                        if ((from xx in lisencpedcli where xx.pedoriginal.Trim().Equals(pedido.PEDORI_EPC) select xx).ToList().Count() > 0)//FJRF - Buscamos si el dato ya existe y si existe hacemos lo siguiente
                        {
                            MessageBox.Show("El pedido [ " + pedido.PEDORI_EPC + " ] ya existe.", "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Warning);//FJRF - Informamos al usuario
                            pedido.PEDORI_EPC = "";//FJRF - Eliminanos el dato digitado
                        }
                        else//FJRF - no existe aun hacemos lo siguiente
                        {
                            strArchivo = strRuta + pedido.PEDORI_EPC.Trim() + ".PSC";
                            dlg.FileName = strArchivo;
                            if (File.Exists(strArchivo))
                                logExiste = true;
                            else
                            {
                                strArchivo = strRutaAux + pedido.PEDORI_EPC.Trim() + ".PSC";
                                if (File.Exists(strArchivo))
                                {
                                    File.Copy(strRutaAux + pedido.PEDORI_EPC.Trim() + ".PSC", strRuta + pedido.PEDORI_EPC.Trim() + ".PSC");
                                    logExiste = true;
                                }
                                else
                                {
                                    logExiste = false;
                                    MessageBox.Show("No se encontro el pedido: " + pedido.PEDORI_EPC, "Inconsistencia", MessageBoxButton.OK, MessageBoxImage.Stop, MessageBoxResult.OK);
                                }
                            }
                        }
                    }
                }
                else
                {
                    Nullable<bool> result = dlg.ShowDialog();
                    logExiste = Convert.ToBoolean(result);
                }
            }

            if (logExiste == true)
            {
                //pedido.PEDORI_EPC = dlg.FileName;
                if (File.Exists(strRuta + pedido.PEDORI_EPC.Trim() + ".PSC")) 
                {
                    Mouse.OverrideCursor = Cursors.Wait;

                    StreamReader sr = File.OpenText(strRuta + pedido.PEDORI_EPC.Trim() + ".PSC");
                    string linea = sr.ReadLine();
                    string strOriginal = linea.Substring(0,6);

                    MDOgeneral.spComando.CommandText = "SP_GRABARPEDCLI";
                    MDOgeneral.spComando.Connection = MDOgeneral.conexion;
                    MDOgeneral.spComando.CommandType = CommandType.StoredProcedure;
                    MDOgeneral.spComando.Parameters.Clear();

                    //Input
                    MDOgeneral.spComando.Parameters.Add("pva_codcli", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = codcli;
                    MDOgeneral.spComando.Parameters["pva_codcli"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pva_codsub", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = pedido.SUBCLI_EPC;
                    MDOgeneral.spComando.Parameters["pva_codsub"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pva_mercado", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = pedido.DESPED_EPC;
                    MDOgeneral.spComando.Parameters["pva_mercado"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pdt_fecped", Oracle.DataAccess.Client.OracleDbType.Date, 40).Value = pedido.FECPED_EPC;
                    MDOgeneral.spComando.Parameters["pdt_fecped"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pdt_fecent", Oracle.DataAccess.Client.OracleDbType.Date, 40).Value = pedido.FECENT_EPC;
                    MDOgeneral.spComando.Parameters["pdt_fecent"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pva_observ", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Value = pedido.OBSPED_EPC;
                    MDOgeneral.spComando.Parameters["pva_observ"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pva_numori", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = strOriginal;
                    MDOgeneral.spComando.Parameters["pva_numori"].Direction = ParameterDirection.Input;

                    //Output
                    MDOgeneral.spComando.Parameters.Add("pva_result", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                    MDOgeneral.spComando.Parameters.Add("pva_errusu", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                    MDOgeneral.spComando.ExecuteNonQuery();
                    string c = MDOgeneral.spComando.Parameters["pva_result"].Value.ToString();

                    if (c == "N")
                    {
                        MessageBox.Show(MDOgeneral.spComando.Parameters["pva_errusu"].Value.ToString() , "Error en la Importación", MessageBoxButton.OK, MessageBoxImage.Error , MessageBoxResult.OK);
                        Mouse.OverrideCursor = Cursors.Arrow;

                        return;
                    }
                    pedido.PEDORI_EPC = strOriginal;

                    consultarpedcli();
                    Selencpedcli = lisencpedcli[0];

                    MessageBox.Show("Se creo el pedido numero: " + Selencpedcli.codped, "Importación de pedido OK",MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);

                    Mouse.OverrideCursor = Cursors.Arrow;
                    //carDetOri(sr);
                }
            }        
        }

        public void guardar(WrapPanel wPnot)
        {
           try 
           {
               if (pedido.EXISTE)
               {
                    List<clases.CLSDETPPCP> lisdetped = new List<clases.CLSDETPPCP>();
                   for (int i = 0; i <= lisdetpedref.Count - 1; i++)
                   {
                       for (int j = 2; j <= lisdetpedref[i].pedtalla.Columns.Count - 1; j++)
                       {
                           if (!String.IsNullOrEmpty(lisdetpedref[i].pedtalla.Rows[4][j].ToString()))
                           {
                               clases.CLSDETPPCP detped = new clases.CLSDETPPCP();
                               detped.NROPED_DPC = pedido.NROPED_EPC;
                               int candes=0, canades=0;
                               if (!String.IsNullOrEmpty(lisdetpedref[i].pedtalla.Rows[2][j].ToString()))
                               {
                                 candes = Convert.ToInt32(lisdetpedref[i].pedtalla.Rows[2][j]);
                               }
                               canades= Convert.ToInt32(lisdetpedref[i].pedtalla.Rows[4][j]);
                               detped.CANDES_DPC =candes  +canades;
                               detped.CODCLI_DPC = codcli;
                               detped.CODCOL_DPC = lisdetpedref[i].detpedido.CODCOL_DPC;
                               detped.CODREF_DPC = lisdetpedref[i].detpedido.CODREF_DPC;
                               detped.CODTAL_DPC = lisdetpedref[i].pedtalla.Columns[j].ColumnName;
                               lisdetped.Add(detped);
                           }
                       }
                   }

                   if (new clases.CLSDETPPCP().actPedido(lisdetped) > 0)
                   {
                       imprimir();
                       
                       new MDOgeneral.notificar(wPnot, "Los cambios en el pedido " + pedido.NROPED_EPC + " fueron realizados.", true);
                       consultarenc();
                       lisdetpedref.Clear();
                       MODIFI = false;
                   }

               }
               else 
               {
                   pedido.ESTPED_EPC = "P";
                   pedido.PEDORI_EPC = " ";
                   List<clases.CLSDETPPCP> lisdetped = new List<clases.CLSDETPPCP>();
                   for (int i = 0; i <= lisdetpedref.Count - 1; i++) {
                       for (int j = 2; j <= lisdetpedref[i].pedtalla.Columns.Count-1 ; j++)
                       {
                           if (!String.IsNullOrEmpty(lisdetpedref[i].pedtalla.Rows[0][j].ToString()))
                           {
                               clases.CLSDETPPCP detped = new clases.CLSDETPPCP();
                               detped.NROPED_DPC = 0;
                               detped.CANDES_DPC = 0;
                               detped.CANENT_DPC = 0;
                               detped.CANPED_DPC = Convert.ToInt32(lisdetpedref[i].pedtalla.Rows[0][j]);
                               detped.CODCLI_DPC = codcli;
                               detped.CODCOL_DPC = lisdetpedref[i].detpedido.CODCOL_DPC;
                               detped.CODREF_DPC = lisdetpedref[i].detpedido.CODREF_DPC;
                               detped.CODTAL_DPC = lisdetpedref[i].pedtalla.Columns[j].ColumnName;
                               detped.PREPRO_DPC = 0;
                               lisdetped.Add(detped);
                           }
                       }
                   }

                   if (pedido.crearPedido(lisdetped)>0) {

                       imprimir();

                       new MDOgeneral.notificar(wPnot, "El pedido "+pedido.NROPED_EPC+" fue creado correctamente.", true);
                       consultarenc();
                       lisdetpedref.Clear();
                       MODIFI = false;
                   }
               }
            
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void busCli() 
        {
            try 
            {
                FRMbuscar f = new FRMbuscar(new clases.CLSMAECLIP(), "buscar", "Nombre_cliente", "NOMCLI_CLI", "Codigo");
                f.ShowDialog();

                if (codcli== f.retorno)
                {
                    codcli = "";
                }

                if (f.retorno != "")
                {
                    codcli = f.retorno;
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Carga detalle del pedido desde archivo original
        public void carDetOri(StreamReader sr)
        {
            clases.CLSENCPPCP pc = new clases.CLSENCPPCP { CODCLI_EPC=codcli };
            pc.ConsecPed();
            int numPedido = pc.NROPED_EPC;

            string  linea = sr.ReadLine ();
            totalis = 0;
            while (linea != null) 
            {                     
                detpedref detped = new detpedref();

                detped.codigo = linea.Substring(6,6);
                detped.detpedido.CODTAL_DPC = linea.Substring(12, 2);
                detped.detpedido.CANPED_DPC = Convert.ToInt32(linea.Substring(14, 3));
                detped.detpedido.CODCLI_DPC = codcli;
                detped.detpedido.NROPED_DPC = numPedido;

                clases.CLSMAEREF maeref=new clases.CLSMAEREF{CODREF_REF=detped.detpedido.CODREF_DPC,CODCOL_REF=detped.detpedido.CODCOL_DPC};
                maeref.Consultar();
                detped.nomref=maeref.NOMREF_REF;
                detped.canpen=0;
                detped.demas=0;
                detped.total=0;
                clases.CLSMAECOL maecol=new clases.CLSMAECOL{CODCOL_COL=detped.detpedido.CODCOL_DPC};
                maecol.Consultar();
                detped.nomcol=maecol.NOMCOL_COL;

                clases.CLSMAECLIP maecli=new clases.CLSMAECLIP{CODCLI_CLI=codcli};
                maecli.consultar();
                clases.CLSMAETARP maetar=new clases.CLSMAETARP{CODCOL_TAR=detped.detpedido.CODCOL_DPC,CODREF_TAR=detped.detpedido.CODREF_DPC,CODLIS_TAR=maecli.CODLIS_CLI};
                maetar.consTarUniRef();
                detped.valor=maetar.VALOR_TAR;


                //detped.detpedido.CANPED_DPC = 0;
                detped.detpedido.CANENT_DPC = 0;
                detped.detpedido.CANDES_DPC = 0;
                detped.canpen = detped.detpedido.CANPED_DPC;
                detped.total = detped.canpen * detped.valor;
                //El codigo del pedido se debe inicializar para nuevo
                detped.detpedido.NROPED_DPC = 0;
                detped.detpedido.CODCLI_DPC = codcli;
                totalis = totalis + detped.total;
                lisdetpedref.Add(detped);
                linea = sr.ReadLine();
            }

            MODIFI = true;

        }

        public void elimPed(WrapPanel wPnot)
        {
            try {

                if (pedido.eliPedido() > 0)
                {
                    new MDOgeneral.notificar(wPnot, "El pedido " + pedido.NROPED_EPC + " fue eliminado correctamente.", true);
                    consultarenc();
                    lisdetpedref.Clear();
                }
                else {
                    new MDOgeneral.notificar(wPnot, "El pedido " + pedido.NROPED_EPC + " no se puede eliminar, tiene cantidad descartada o enviada.", false);
                }

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void imprimir() 
        {
            try
            {

                if (pedido.NROPED_EPC > 0)
                {
                    MDOgeneral mod = new MDOgeneral();

                    MDOgeneral.spComando.CommandText = "SP_IMPPPCP";
                    MDOgeneral.spComando.Connection = MDOgeneral.conexion;
                    MDOgeneral.spComando.CommandType = CommandType.StoredProcedure;
                    MDOgeneral.spComando.Parameters.Clear();

                    //Input
                    MDOgeneral.spComando.Parameters.Add("pva_codcli", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = codcli;
                    MDOgeneral.spComando.Parameters["pva_codcli"].Direction = ParameterDirection.Input;

                    MDOgeneral.spComando.Parameters.Add("pva_nroped", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = pedido.NROPED_EPC;
                    MDOgeneral.spComando.Parameters["pva_nroped"].Direction = ParameterDirection.Input;
               
                    //Output
                    MDOgeneral.spComando.Parameters.Add("pva_result", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                    MDOgeneral.spComando.Parameters.Add("pva_errusu", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                    MDOgeneral.spComando.ExecuteNonQuery();
                    string c = MDOgeneral.spComando.Parameters["pva_result"].Value.ToString();

                    DataTable dtEnctit = mod.consulta("select * from TMPTITULOSTALLA order by CODTAL_TMP, ORDEN_TMP asc");
                    DataTable dtDetalle = mod.consulta("select * from TMPLISEXIP order by CODREF_TLE, CODCOL_TLE asc");
                
                    DataSet ds = new DataSet("dsTallas");
                    ds.DataSetName = "dsTallas";

                    DataTable encPed = new DataTable("dtEncPed");
                    encPed.Columns.Add("NROPED", System.Type.GetType("System.Int32"));
                    encPed.Columns.Add("FECPED", System.Type.GetType("System.String"));
                    encPed.Columns.Add("FECENT", System.Type.GetType("System.String"));
                    encPed.Columns.Add("SUBCLI", System.Type.GetType("System.String"));
                    encPed.Columns.Add("MERCADO", System.Type.GetType("System.String"));
                    encPed.Columns.Add("ORIGINAL", System.Type.GetType("System.String"));
                    encPed.Columns.Add("STREMPRESA", System.Type.GetType("System.String"));
                    encPed.Columns.Add("STROBSERVACION", System.Type.GetType("System.String"));

                    DataRow dr = encPed.NewRow();
                    dr["NROPED"] = Selencpedcli.codped;
                    dr["FECPED"] = Selencpedcli.fechaped;
                    dr["FECENT"] = Selencpedcli.fechaent;
                    dr["SUBCLI"] = Selencpedcli.nomsubcli;
                    dr["MERCADO"] = pedido.DESPED_EPC == "N" ? "Nacional" : "Exportación";
                    dr["ORIGINAL"] = Selencpedcli.pedoriginal;
                    dr["STREMPRESA"] = MDOgeneral.strEmpresaImprime;
                    dr["STROBSERVACION"] = pedido.OBSPED_EPC;
                    encPed.Rows.Add(dr);
                    encPed.TableName = "dtEncPed";

                    DataTable dtTit = new DataTable("dtTallas");
                    dtTit.Columns.Add("CODTAL", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T1", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T2", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T3", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T4", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T5", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T6", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T7", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T8", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T9", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T10", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T11", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T12", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T13", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T14", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T15", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T16", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T17", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T18", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T19", System.Type.GetType("System.String"));
                    dtTit.Columns.Add("T20", System.Type.GetType("System.String"));

                    foreach (DataRow drt in dtEnctit.Rows)
                    {
                        DataRow dra = dtTit.NewRow();
                        dra["CODTAL"] = drt["CODTAL_TMP"].ToString();
                        dra["T1"] = drt["T1_TMP"].ToString();
                        dra["T2"] = drt["T2_TMP"].ToString();
                        dra["T3"] = drt["T3_TMP"].ToString();
                        dra["T4"] = drt["T4_TMP"].ToString();
                        dra["T5"] = drt["T5_TMP"].ToString();
                        dra["T6"] = drt["T6_TMP"].ToString();
                        dra["T7"] = drt["T7_TMP"].ToString();
                        dra["T8"] = drt["T8_TMP"].ToString();
                        dra["T9"] = drt["T9_TMP"].ToString();
                        dra["T10"] = drt["T10_TMP"].ToString();
                        dra["T11"] = drt["T11_TMP"].ToString();
                        dra["T12"] = drt["T12_TMP"].ToString();
                        dra["T13"] = drt["T13_TMP"].ToString();
                        dra["T14"] = drt["T14_TMP"].ToString();
                        dra["T15"] = drt["T15_TMP"].ToString();
                        dra["T16"] = drt["T16_TMP"].ToString();
                        dra["T17"] = drt["T17_TMP"].ToString();
                        dra["T18"] = drt["T18_TMP"].ToString();
                        dra["T19"] = drt["T19_TMP"].ToString();
                        dra["T20"] = drt["T20_TMP"].ToString();
                        dtTit.Rows.Add(dra);
                    }
                    dtEnctit.TableName = "dtTallas";

                    DataTable detPed = new DataTable("dtDetPed");
                    detPed.Columns.Add("CODREF", System.Type.GetType("System.String"));
                    detPed.Columns.Add("CODCOL", System.Type.GetType("System.String"));
                    detPed.Columns.Add("NOMREF", System.Type.GetType("System.String"));
                    detPed.Columns.Add("NOMCOL", System.Type.GetType("System.String"));
                    detPed.Columns.Add("CODTAL", System.Type.GetType("System.String"));
                    detPed.Columns.Add("T1", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T2", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T3", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T4", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T5", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T6", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T7", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T8", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T9", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T10", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T11", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T12", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T13", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T14", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T15", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T16", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T17", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T18", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T19", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("T20", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("TOTR", System.Type.GetType("System.Double"));
                    detPed.Columns.Add("TOTAL", System.Type.GetType("System.Double"));
                    detPed.Columns.Add("CLSREF", System.Type.GetType("System.String"));
                    detPed.Columns.Add("PREREF", System.Type.GetType("System.Int32"));
                    detPed.Columns.Add("TOTCOS", System.Type.GetType("System.Double"));
                    detPed.Columns.Add("CODMAR", System.Type.GetType("System.String"));
                    detPed.Columns.Add("NOMMAR", System.Type.GetType("System.String"));
                    detPed.Columns.Add("CODLIN", System.Type.GetType("System.String"));
                    detPed.Columns.Add("NOMLIN", System.Type.GetType("System.String"));
                    detPed.Columns.Add("POSBOD", System.Type.GetType("System.String"));
                    detPed.Columns.Add("COSREF", System.Type.GetType("System.Int32"));
               
                    foreach (DataRow drdet in dtDetalle.Rows)
                    {
                        DataRow drd = detPed.NewRow();
                        drd["CODREF"] = drdet["CODREF_TLE"].ToString();
                        drd["CODCOL"] = drdet["CODCOL_TLE"].ToString();
                        drd["NOMREF"] = drdet["NOMREF_TLE"].ToString();
                        drd["NOMCOL"] = drdet["NOMCOL_TLE"].ToString();
                        drd["CODTAL"] = drdet["CODTAL_TLE"].ToString();
                        drd["T1"] = Convert.ToInt32(drdet["T1_TLE"]);
                        drd["T2"] = Convert.ToInt32(drdet["T2_TLE"]);
                        drd["T3"] = Convert.ToInt32(drdet["T3_TLE"]);
                        drd["T4"] = Convert.ToInt32(drdet["T4_TLE"]);
                        drd["T5"] = Convert.ToInt32(drdet["T5_TLE"]);
                        drd["T6"] = Convert.ToInt32(drdet["T6_TLE"]);
                        drd["T7"] = Convert.ToInt32(drdet["T7_TLE"]);
                        drd["T8"] = Convert.ToInt32(drdet["T8_TLE"]);
                        drd["T9"] = Convert.ToInt32(drdet["T9_TLE"]);
                        drd["T10"] = Convert.ToInt32(drdet["T10_TLE"]);
                        drd["T11"] = Convert.ToInt32(drdet["T11_TLE"]);
                        drd["T12"] = Convert.ToInt32(drdet["T12_TLE"]);
                        drd["T13"] = Convert.ToInt32(drdet["T13_TLE"]);
                        drd["T14"] = Convert.ToInt32(drdet["T14_TLE"]);
                        drd["T15"] = Convert.ToInt32(drdet["T15_TLE"]);
                        drd["T16"] = Convert.ToInt32(drdet["T16_TLE"]);
                        drd["T17"] = Convert.ToInt32(drdet["T17_TLE"]);
                        drd["T18"] = Convert.ToInt32(drdet["T18_TLE"]);
                        drd["T19"] = Convert.ToInt32(drdet["T19_TLE"]);
                        drd["T20"] = Convert.ToInt32(drdet["T20_TLE"]);
                        drd["TOTR"] = Convert.ToDouble(drdet["TOTR_TLE"]);
                        drd["TOTAL"] = Convert.ToDouble(drdet["TOTAL_TLE"]);
                        drd["CLSREF"] = drdet["CLSREF_TLE"].ToString();
                        drd["PREREF"] = Convert.ToInt32(drdet["PREREF_TLE"]);
                        drd["TOTCOS"] = Convert.ToInt32(drdet["TOTCOS_TLE"]);
                        drd["CODMAR"] = drdet["CODMAR_TLE"].ToString();
                        drd["NOMMAR"] = drdet["NOMMAR_TLE"].ToString();
                        drd["CODLIN"] = drdet["CODLIN_TLE"].ToString();
                        drd["NOMLIN"] = drdet["NOMLIN_TLE"].ToString();
                        drd["POSBOD"] = drdet["POSBOD_TLE"].ToString();
                        drd["COSREF"] = Convert.ToInt32(drdet["COSREF_TLE"]);
                        detPed.Rows.Add(drd);
                    }
                    detPed.TableName = "dtDetPed";

                    DataTable dtD = new DataTable("dtDetalle");
                    dtD.TableName = "dtDetalle";
                    DataTable dtE = new DataTable("dtEncabezado");
                    dtE.TableName = "dtEncabezado";

                    ds.Tables.Add(encPed);
                    ds.Tables.Add(dtTit);
                    ds.Tables.Add(detPed);
                    ds.Tables.Add(dtD);
                    ds.Tables.Add(dtE);
                    Vista vista = new Vista { ds = ds, reporte = @"reportes\rpPedCli.rpt" };
                    vista.Show();
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public class encpedcli:ObservableObject 
        {
            int _codped;
            public int codped 
            {
                get { return _codped; }
                set { _codped = value; RaisePropertyChangedEvent("codped"); }
            }

            string _fechaped;
            public string fechaped
            {
                get { return _fechaped; }
                set { _fechaped = value; RaisePropertyChangedEvent("fechaped"); }
            }

            string _fechaent;
            public string fechaent
            {
                get { return _fechaent; }
                set { _fechaent = value; RaisePropertyChangedEvent("fechaent"); }
            }

            string _nomsubcli;
            public string nomsubcli
            {
                get { return _nomsubcli; }
                set { _nomsubcli = value; RaisePropertyChangedEvent("nomsubcli"); }
            }

            int _canped;
            public int canped 
            {
                get { return _canped; }
                set { _canped = value; RaisePropertyChangedEvent("canped"); }
            }

            int _canent;
            public int canent 
            {
                get { return _canent; }
                set { _canent = value; RaisePropertyChangedEvent("canent"); }
            }

            int _candes;
            public int candes
            {
                get { return _candes; }
                set { _candes = value; RaisePropertyChangedEvent("candes"); }
            }

            int _candemas;
            public int candemas
            {
                get { return _candemas < 0 ? 0 : _candemas; }
                set {  _candemas = value; RaisePropertyChangedEvent("candemas"); }
            }

            int _canpen;
            public int canpen
            {
                get { return _canpen < 0 ? 0 : _canpen; }
                set { _canpen = value; RaisePropertyChangedEvent("canpen"); }
            }

            string _pedoriginal;
            public string pedoriginal
            {
                get { return _pedoriginal; }
                set { _pedoriginal = value; RaisePropertyChangedEvent("pedoriginal"); }
            }

            Boolean _EXISTE = false;
            public Boolean EXISTE 
            {
                get { return _EXISTE; }
                set { _EXISTE = value; RaisePropertyChangedEvent("EXISTE"); }            
            }


            Boolean _CANDEL = false;
            public Boolean CANDEL
            {
                get 
                {
                    if (candes > 0 || canent > 0 || !EXISTE)
                        return false;
                    else 
                        return true;       
                }
            }

            
        }

        public class detpedref : ObservableObject 
        {
            string _codigo;
            public string codigo 
            {
                get { return _codigo; }
                set 
                {
                    try
                    {
                        _codigo = value;
                        if (_codigo.Length > 6) 
                            busRef();

                        if (_codigo.Length == 6)
                        {
                            detpedido.CODREF_DPC = codigo.Substring(0, 4);
                            detpedido.CODCOL_DPC = codigo.Substring(4, 2);
                        }
                        else 
                        {
                            detpedido.CODREF_DPC ="";
                            detpedido.CODCOL_DPC = "";
                        }

                        clases.CLSMAEREF referencia = new clases.CLSMAEREF { CODREF_REF = detpedido.CODREF_DPC, CODCOL_REF = detpedido.CODCOL_DPC };
                        referencia.Consultar();
                        nomref = referencia.NOMREF_REF;
                        clases.CLSMAECOL maecolo = new clases.CLSMAECOL { CODCOL_COL = detpedido.CODCOL_DPC };
                        maecolo.Consultar();
                        nomcol = maecolo.NOMCOL_COL;

                        clases.CLSMAECLIP cliente = new clases.CLSMAECLIP { CODCLI_CLI = detpedido.CODCLI_DPC };
                        cliente.consultar();
                        clases.CLSMAETARP tarifa = new clases.CLSMAETARP { CODCOL_TAR = detpedido.CODCOL_DPC, CODREF_TAR = detpedido.CODREF_DPC, CODLIS_TAR = cliente.CODLIS_CLI };
                        tarifa.consTarUniRef();
                        valor = tarifa.VALOR_TAR;
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message); }
                    RaisePropertyChangedEvent("codigo");
                }
            }

            void busRef() 
            {
                FRMBuscarCol f = new FRMBuscarCol();
                f.Retorno = "";
                f.EsReferencia = true;
                f.RequiereColor = true;
                f.ShowDialog();
                if (f.Retorno.Length > 0)
                {
                    codigo = f.Retorno;
                    return;
                }
            }

            string _nomref;
            public string nomref 
            {
                get { return _nomref; }
                set { _nomref = value; RaisePropertyChangedEvent("nomref"); }
            }

            int _demas;
            public int demas
            {
                get { return _demas < 0 ? 0 : _demas; }
                set { _demas = value; RaisePropertyChangedEvent("demas"); }
            }

            int _canpen;
            public int canpen
            {
                get { return _canpen < 0 ? 0 : _canpen; }
                set { _canpen = value; RaisePropertyChangedEvent("canpen"); }
            }

            int _pedido;
            public int pedido
            {
                get { return _pedido < 0 ? 0 : _pedido; }
                set { _pedido = value; RaisePropertyChangedEvent("pedido"); }
            }

            int _enviado;
            public int enviado
            {
                get { return _enviado < 0 ? 0 : _enviado; }
                set { _enviado = value; RaisePropertyChangedEvent("enviado"); }
            }

            int _descartado;
            public int descartado
            {
                get { return _descartado < 0 ? 0 : _descartado; }
                set { _descartado = value; RaisePropertyChangedEvent("descartado"); }
            }

            double _valor;
            public double valor 
            {
                get { return _valor; }
                set { _valor = value; RaisePropertyChangedEvent("valor"); }
            }

            double _total;
            public double total
            {
                get { return _total; }
                set { _total = value; RaisePropertyChangedEvent("total"); }
            }

            string _nomcol;
            public string nomcol
            {
                get { return _nomcol; }
                set { _nomcol = value; RaisePropertyChangedEvent("nomcol"); }
            }

            Boolean _modifi = false;
            public Boolean modifi 
            {
                get { return _modifi; }
                set { _modifi = value; RaisePropertyChangedEvent("modifi"); }
            }

            clases.CLSDETPPCP _detpedido = new clases.CLSDETPPCP();
            public clases.CLSDETPPCP detpedido
            {
                get { return _detpedido; }
                set {  _detpedido = value;  RaisePropertyChangedEvent("detpedido"); }
            }
            
            DataTable _pedtalla = new DataTable();
            public DataTable pedtalla 
            {
                get { return _pedtalla; }
                set 
                { 
                    _pedtalla = value;
                    modifi = true;
                    RaisePropertyChangedEvent("pedtalla");
                }
            }

            DataTable _prepedtalla = new DataTable();
            public DataTable prepedtalla 
            {
                get { return _prepedtalla; }
                set { _prepedtalla = value; RaisePropertyChangedEvent("prepedtalla"); }
            }
          
        }
    }
}


namespace ReglasValidacion
{
    //validar  creacion orden de produccion
    public class esOKpedporcli : ValidationRule
    {
        public Window pedporcli { get; set; }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            produccion.forms.pedporcli pedidocli = (produccion.forms.pedporcli)pedporcli.DataContext;
            ValidationResult resp=new ValidationResult(true,null);

            if (pedidocli.pedido.EXISTE)
            {

                for (int i = 2; i <= pedidocli.Seldetpedref.prepedtalla.Columns.Count - 1; i++)
                {

                    if (pedidocli.Seldetpedref.prepedtalla.Rows[0][i].ToString().Equals(""))
                    {
                        pedidocli.Seldetpedref.prepedtalla.Rows[4][i] = "";
                    }

                    if (!pedidocli.Seldetpedref.prepedtalla.Rows[0][i].ToString().Equals("") && !pedidocli.Seldetpedref.prepedtalla.Rows[4][i].ToString().Equals(""))
                    {

                        ValidationResult res = new esOKentero { Maxc = 10, Minc = 0, Minv = "*", Maxv = "*" }.Validate(pedidocli.Seldetpedref.prepedtalla.Rows[4][i].ToString().Equals("") ? "0" : pedidocli.Seldetpedref.prepedtalla.Rows[4][i].ToString(), cultureInfo);
                        if (!res.IsValid)
                        {
                            resp = new ValidationResult(false, "El valor a descartar en la talla " + pedidocli.Seldetpedref.prepedtalla.Columns[i].ColumnName + " debe ser numerico");
                        }
                        else
                        {
                            int pedido = Convert.ToInt32(pedidocli.Seldetpedref.prepedtalla.Rows[0][i]) - Convert.ToInt32(pedidocli.Seldetpedref.prepedtalla.Rows[2][i]);
                            int enviado = Convert.ToInt32(pedidocli.Seldetpedref.prepedtalla.Rows[1][i]);
                            int adescartar = Convert.ToInt32(pedidocli.Seldetpedref.prepedtalla.Rows[4][i]);

                            if (adescartar > (pedido - (enviado > pedido ? pedido : enviado)))
                                resp = new ValidationResult(false, "El valor a descartar es mayor que el valor pedido en la talla " + pedidocli.Seldetpedref.prepedtalla.Columns[i].ColumnName);

                            if (Convert.ToInt32(pedidocli.Seldetpedref.prepedtalla.Rows[4][i]) < 0)
                                resp = new ValidationResult(false, "El valor a descartar debe ser mayor que 0 en la talla " + pedidocli.Seldetpedref.prepedtalla.Columns[i].ColumnName);
                        }
                    }
                }
            }
            else 
            {
                for (int i = 2; i <= pedidocli.Seldetpedref.prepedtalla.Columns.Count - 1; i++)
                {

                    ValidationResult res = new esOKentero { Maxc = 10, Minc = 0, Minv = "*", Maxv = "*" }.Validate(pedidocli.Seldetpedref.prepedtalla.Rows[0][i].ToString().Equals("") ? "0" : pedidocli.Seldetpedref.prepedtalla.Rows[0][i].ToString(), cultureInfo);
                    if (!res.IsValid)
                    {
                        resp = new ValidationResult(false, "El valor a pedir en la talla " + pedidocli.Seldetpedref.prepedtalla.Columns[i].ColumnName + " debe ser numerico");
                    }
                    else
                    {
                        if (!String.IsNullOrEmpty(pedidocli.Seldetpedref.prepedtalla.Rows[0][i].ToString()))
                        {
                            if (Convert.ToInt32(pedidocli.Seldetpedref.prepedtalla.Rows[0][i]) < 0)
                            {
                                resp = new ValidationResult(false, "El valor a pedir debe ser mayor que 0 en la talla " + pedidocli.Seldetpedref.prepedtalla.Columns[i].ColumnName);
                            }
                        }
                    }
                }
            }

            pedidocli.ACTACEP = resp.IsValid;

            return resp;
        }
    }

    public class esOKcliExis : ValidationRule
    {
        public Window pedporcli { get; set; }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            ValidationResult resp = new ValidationResult(true, null);

            produccion.clases.CLSMAECLIP cliente = new produccion.clases.CLSMAECLIP { CODCLI_CLI = value.ToString() };
            if(!cliente.existe())
                resp = new ValidationResult(false, "El cliente no existe.");

            return resp;
        }
    }

    public class esOKrefped : ValidationRule
    {
        public Window pedporcli { get; set; }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            produccion.forms.pedporcli pedidocli = (produccion.forms.pedporcli)pedporcli.DataContext;
            ValidationResult resp = new ValidationResult(true, null);


            if (pedidocli.Seldetpedref == null|| pedidocli.Seldetpedref.codigo == null)
            {
                return resp;
            }

            if (pedidocli.lisdetpedref.ToList().FindAll(r => r.codigo.Equals(pedidocli.Seldetpedref.codigo)).Count > 1)
            {
                resp= new ValidationResult(false, "La referencia ingresada ya existe en el pedido.");
            }
            else
            {

                produccion.clases.CLSMAEREF referenica = new produccion.clases.CLSMAEREF { CODREF_REF = pedidocli.Seldetpedref.detpedido.CODREF_DPC, CODCOL_REF = pedidocli.Seldetpedref.detpedido.CODCOL_DPC };
                referenica.Consultar();
                if (!referenica.EXISTE)
                    resp = new ValidationResult(false, "La referencia ingresada no existe.");
            }

           pedidocli.ERRORPEDREF=!resp.IsValid; 
           return resp;

        }
    }
}
